// Evol functions.
// Author:
//    4144
// Description:
//    Moving npc utility functions
// Variables:
//    none

function	script	initpath	{
    deletearray getvariableofnpc(.movepathcmd$, strnpcinfo(3));
    deletearray getvariableofnpc(.movepathy, strnpcinfo(3));
    deletearray getvariableofnpc(.movepathx, strnpcinfo(3));
    .@cnt = 0;

    for (.@f = 0; .@f < getargcount(); .@f = .@f + 3)
    {
        set getvariableofnpc(.movepathcmd$[.@cnt], strnpcinfo(3)), getarg(.@f);
        set getvariableofnpc(.movepathx[.@cnt], strnpcinfo(3)), getarg(.@f + 1);
        set getvariableofnpc(.movepathy[.@cnt], strnpcinfo(3)), getarg(.@f + 2);
        .@cnt ++;
    }
    //debugmes "array size: " + str(getarraysize(getvariableofnpc(.movepath, strnpcinfo(3))));
    return;
}

function	script	domoveaction	{
    //debugmes "domoveaction: " + str(getvariableofnpc(.movepos, strnpcinfo(3)));
    .@pos = getvariableofnpc(.movepos, strnpcinfo(3));
    if (.@pos >= getarraysize(getvariableofnpc(.movepathx, strnpcinfo(3))) || .@pos < 0)
        return;
    //debugmes "walking";
    .@cmd$ = getvariableofnpc(.movepathcmd$[.@pos], strnpcinfo(3));
    //debugmes "cmd: " + .@cmd$;

    if (.@cmd$ == "move")
    {
        npcwalkto getvariableofnpc(.movepathx[.@pos], strnpcinfo(3)), getvariableofnpc(.movepathy[.@pos], strnpcinfo(3));
    }
    else if (.@cmd$ == "dir")
    {
        setnpcdir getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
        return 2;
    }
    else if (.@cmd$ == "wait")
    {
        set getvariableofnpc(.waitticks, strnpcinfo(3)), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
    }
    else if (.@cmd$ == "emote")
    {
        unitemote getnpcid(0), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
        return 2;
    }
    else if (.@cmd$ == "class")
    {
        .class = getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
        return 2;
    }
    else if (.@cmd$ == "warp")
    {
        movenpc strnpcinfo(3), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3)), getvariableofnpc(.movepathy[.@pos], strnpcinfo(3));
    }
    else if (.@cmd$ == "goto")
    {
        set getvariableofnpc(.movepos, strnpcinfo(3)), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
        return 0;
    }
    else if (.@cmd$ == "rmove")
    {
        getmapxy(.@mapName$, .@x, .@y, 1);
        npcwalkto .@x + getvariableofnpc(.movepathx[.@pos], strnpcinfo(3)), .@y + getvariableofnpc(.movepathy[.@pos], strnpcinfo(3));
    }
    else if (.@cmd$ == "speed")
    {
        .speed = getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
        return 2;
    }
    else if (.@cmd$ == "sit")
    {
        npcsit;
    }
    else if (.@cmd$ == "stand")
    {
        npcstand;
    }
    return 1;
}

function	script	movetonextpos	{
    .@wait = getvariableofnpc(.waitticks, strnpcinfo(3));
    if (.@wait > 0)
    {
        .@wait --;
        //debugmes "wait";
        set getvariableofnpc(.waitticks, strnpcinfo(3)), .@wait;
        return;
    }
    .@true = 1;
    while (.@true)
    {
        .@true = 0;
        .@pos = getvariableofnpc(.movepos, strnpcinfo(3));
        //debugmes "movetonextpos: " + str(.@pos);
        .@res = domoveaction(.@pos);
        if (.@res == 1 || .@res == 2)
        {
            .@pos++;
            if (.@pos >= getarraysize(getvariableofnpc(.movepathx, strnpcinfo(3))))
                .@pos = 0;
            set getvariableofnpc(.movepos, strnpcinfo(3)), .@pos;
        }
        if (.@res == 0 || .@res == 2)
        {
            .@true = 1;
        }
    }
    return;
}

function	script	initialmove	{
    set getvariableofnpc(.movepos, strnpcinfo(3)), 0;
    set getvariableofnpc(.waitticks, strnpcinfo(3)), -1;
    movetonextpos;
    return;
}

function	script	getmovecmd	{
    .@pos = getvariableofnpc(.movepos, strnpcinfo(3));
    if (.@pos >= getarraysize(getvariableofnpc(.movepathx, strnpcinfo(3))) || .@pos < 0)
        return "";
    return getvariableofnpc(.movepathcmd$[.@pos], strnpcinfo(3));
}

function	script	domovestep	{
    if (isunitwalking())
    {
        initnpctimer;
        end;
    }
    movetonextpos;
    initnpctimer;
    end;
}
